package com.specter.serv.service;

import java.util.List;

/**
 * 行政区划后台接口类
 *
 * @author Liang.Wang
 * @since 2017-03-29
 */
public interface AreaService {

	/**
	 * 按照行政区划获取区划信息
	 * 
	 * @param areaCode 行政区划
	 * @return 区划信息
	 */
	public Object show(String areaCode);

	/**
	 * 按照区划字符串获取区名
	 * 
	 * @param areaCode 行政区划
	 * @return 对应区划名字
	 */
	public String name(String areaCode);

	/**
	 * 按照区划码获取所有子级区划
	 * 
	 * @param areaCode 行政区划
	 * @return 子级区划
	 */
	public List<?> sons(String areaCode);

	/**
	 * 按照区划获取下一级区划
	 * 
	 * @param areaCode 行政区划
	 * @return 子级区划
	 */
	public List<?> next(String areaCode);

	/**
	 * 地区指针位移
	 * 
	 * @author Liang.Wang
	 * @since 2025/04/08 17:07:09
	 */
	public enum Area {
		CHINA(0), PROVINCE(2), CITY(4), DISTRICT(6), TOWN(9), VILLAGE(12), STREET(16);

		private Integer length;

		private Area(Integer length) {
			this.length = length;
		}

		/** 根据code来构建地区 */
		public static Area area(String code) {
			for (Area area : values()) {
				if (code.length() == area.length) {
					return area;
				}
			}
			return Area.CHINA;
		}

		/** 上级地区 */
		public Area prev() {
			int i = ordinal();
			return i == 0 ? this : values()[i - 1];
		}

		/** 下级地区 */
		public Area next() {
			int i = ordinal();
			return i == 5 ? this : values()[i + 1];
		}

		/** 地区长度 */
		public int leve() {
			return this.length;
		}
	}
}
